/**  
 * \file test_prooduit.h
 * \author DIOP et Kacouchia
 * \brief Interface de declaration des fonctions de test de produit.
 */


#ifndef _TEST_LISTE_PRODUIT_H 
#define _TEST_LISTE_PRODUIT_H

#include "typesprimitifs.h"
#include "produit.h"

/**      
 * Proc�dure de d�marrage des tests. 
 * Le nom "set up" est un nom consacr�.   
 * C'est une convention qu'il faut conserver. 
 * C'est la proc�dure d'initialisation des tests.  
 * G�n�ralement, cette proc�dure positionne l'environnment des tests. 
 * Par exemple, calculer dans une variable globale le chemin     
 * d'un r�pertoire o� sont mis des fichiers � lire. 
 * Positionner des variables d'environnement sous Linux, etc.
 *Elle peut �galement tout simplement r�aliser un affichage d'initialisation.
 */
extern void set_up_tests_produit();


/**
 * Test sur la cr�ation d'un produit.
 */
extern void tester_creer_produit(CHAINE nom, ENTIER_POSITIF quantite_dispo,
        DOUBLE prix_un, CATEGORIE categorie
        );


/**
 *Test sur la liberation d'un produit.
 */
extern void tester_liberer_produit(POINTEUR_PRODUIT pp);


/**
 * Test sur l'affichage du produit.
 */
extern void tester_afficher_produit(POINTEUR_PRODUIT pp);


/**
 * Test sur l'augmentation de la quantite disponible.
 */
extern BOOLEEN tester_augmenter_quantite_disponible(POINTEUR_PRODUIT pp,
        ENTIER_POSITIF quantite);



/**
 * Test sur la reduction de la quantite disponible.
 */
extern BOOLEEN tester_reduire_quantite_disponible(POINTEUR_PRODUIT pp,
        ENTIER_POSITIF quantite);


/**
 * Test sur le changement du prix unitaire.
 */
extern BOOLEEN tester_changer_prix_unitaire(DOUBLE prix_un,
        POINTEUR_PRODUIT pp);


/**      
 * Proc�dure de fermeture des tests. Le nom "tear down" est un nom consacr�.     
 * C'est une convention qu'il faut conserver. C'est la proc�dure de fermeture     
 * des tests. Elle peut servir � lib�rer les ressources acquises au d�but des     
 * tests avec la proc�dure set_up. Elle peut �ventuellement afficher les      
 * statistiques g�n�rales des tests : nombre r�ussies et �chou�es.      
 * Elle peut �galement tout simplement r�aliser un affichage de terminaison. 
 */
extern void tear_down_tests_produit();


/**
 * Proc�dure principale de lancement des tests. Lorsqu'on ne souhaite ex�cuter      
 * que quelques tests sur des dizaines, on peut r�aliser la s�lection ici.      
 * set_up et tear_down doivent toujours �tre invoqu�es, respectivement au     
 * d�marrage et � la fermeture des tests.C'est celle-ci qui doit �tre invoqu�e 
 * dans main.c      
 */
extern void tests_produit(POINTEUR_PRODUIT pp, CHAINE nom,
        ENTIER_POSITIF quantite_dispo,
        ENTIER_POSITIF quantite,
        DOUBLE prix_un, CATEGORIE categorie);


#endif /* _TEST_PRODUIT_H */ 
